home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/exec.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include "dh1:source/doors/romconf/doorheader.h"
- #define BPTR long
- #define sm sendmessage
- #define pm prompt
- #define gu getuserstring
- #define pu putuserstring
- #define TIMEOUT 1
- #define hk hotkey
- static char MsgBuf[100][80];
- #define ACCESS_WRITE -1
- #define ACCESS_READ -2
- #define LOCK 1
- #define NOLOCK 0
- #define li lineinput
- int ErrorLevel=0;
- int Lines=0;
- int ActiveConf=0;
- void end(void);
- int strnicmp(char *str1,char *str2,int len);
- int Edit(void);
- void Editor(void);
- void SaveMsg();
- void GiveNet();
- int MsgToHeader(int opt);
- void MsgReceiveHeader();
- BPTR LockUserBase(void);
- void MsgNetHeader(int opt);
- void Upload_A_File(int);
- void free_pdir();
- void InitBuffer();
- void ReplyMyMsg();
- void PackNet();
- int Allowed(void);
- void CleanPlayPen();
- void Pause();
- void UnPackNet();
- int MsgSubjectHeader(int opt);
- void SaveUser(void);
- struct FileLock *pdir = NULL;
- struct FileInfoBlock *dir_info = NULL;
- int MsgHeaders(int opt);
- void ReadMsg();
-
- void BufferMsg(long msg);
- int ALine=0;
- int ACPError=0;
- int ProcessLine(char *pat, char *vorig, char *dest);
- int YesNo(UWORD flag);
- int stats=0;
- char NetAddress[200];
- void CreateFile(char *str);
- struct User
- {
- char Name[31];
- char Handle[31];
- USHORT Slot_Number;
- ULONG AutoMsg;
- ULONG LastMsg;
- ULONG MsgsPosted;
- ULONG Mail_Received;
- } U;
- ULONG ConfMsg;
-
- struct MyStats
- {
- ULONG NMsg;
- } Stats;
-
- struct MyHeader
- {
- char Subject[31];
- char FName[31];
- char TName[31];
- char TNName[31];
- char FNName[31];
- ULONG MsgNum;
- ULONG Received;
- ULONG Written;
- char Type;
- BOOL Net;
- BOOL Deleted;
- } Head;
- char ConfName[80],ConfLoc[80];
- int Conf;
- void strlim(char *str1,char *str2,int limit);
- void sr(char *str);
- long LookUp(char *str);
- void AddUser(void);
- void InitUser();
- void Validate(char *str);
- int GetConf(char *str,int num);
- void GetHighMsg(int opt);
- BPTR LockMsgBase(void);
- void InitStats(void);
- void InitHeader();
- void LoadUser(char *str);
- void LastCommand(void);
- BOOL expert=FALSE;
- char Upload_To[200];
- int Security;
- int node;
- char BBSloc[200];
- char OldConfName[200];
- char OldConfLoc[200];
- void Terminate(void);
- #define PRV_COMMAND 508
- main(int argc,char *argv[])
- {
- char temp[200];
- char t[200];
- char BBName[400];
-
- long timeleft;
- int stop;
- if(argc!=2)
- {
- printf("AEConf version 1.1, written by Joseph Hodge\n");
- printf("This is an AmiExpress 2.03+ (XIM)\n\n");
- exit(0);
- }
- Register(argv[1][0]-'0');node=argv[1][0]-'0';
- gu(temp,DT_SECSTATUS); Security=atoi(temp);
- gu(temp,DT_EXPERT);
- if(temp[0]=='X') expert=TRUE;
- gu(BBSloc,BB_LOCAL);gu(NetAddress,JH_BBSName);
- gu(OldConfName,BB_CONFNAME);
- gu(OldConfLoc,BB_CONFLOCAL);
- gu(temp,BB_MAINLINE);
-
- while(1)
- { stop=0;
- Conf=atoi(&temp[1]);
- if(Conf==0 && (temp[0]=='J' || temp[0]=='j'))
- {
- while(1)
- {
- sprintf(t,"%sNode%d/JoinConf",BBSloc,argv[1][0]-'0');
- showgfile(t);
- pm("Conference Number: ",t,10);
- Conf=atoi(t);
- if(Conf==0) continue;
- else{sprintf(temp,"J %d",Conf); break;}
- }
- }
- if(Conf<=9)
- {
- //strcpy(temp,"J");
-
- pu(temp,RETURNCOMMAND);
-
- Terminate();
- end();
- }
-
- Conf -=9;
- sprintf(t,"%sCustomConf",BBSloc);
- if(!GetConf(t,Conf))
- {
- strcpy(temp,"J 0"); continue;
- }
- if(Security<255)
- {
- if(!Allowed())
- {
- sm("",1);
- sm("Sorry, Conference Access denied!",1);
- sm("",1);strcpy(temp,"J 0");
- Pause(); sm("",1); continue;
- }
-
- }
- InitHeader();
- InitStats();
- sm("",1);sm("",1);
- sm("Joining Conference: ",0);
- sm(ConfName,1);
- sm("",1);
- GetHighMsg(LOCK);
- InitUser();
- ActiveConf=1;
- sprintf(t,"%sBULL",ConfLoc);
- pu(ConfName,BB_CONFNAME);
- pu(ConfLoc,BB_CONFLOCAL);
- if(CheckToDisplay(t)) Pause();
- sm("",1);
- sm("Highest Msg: ",0);
- sprintf(t,"%ld",Stats.NMsg-1L);
- sm(t,1);
- sm("L/Msg. Read: ",0);
- sprintf(t,"%ld",U.LastMsg);
- sm(t,1);
- sm("L/Msg. Auto: ",0);
- sprintf(t,"%ld",U.AutoMsg);
- sm(t,1);
- sm("",1);
- sm("",1);
-
- while(1)
- {
- if(!expert)
- {
- Pause();
-
- sm("",1);
- sprintf(t,"%sMenu",ConfLoc);
- showgfile(t);
- }
- gu(t,JH_BBSName);gu(temp,DT_TIMELIMIT); timeleft=atol(temp);gu(temp,DT_TIMEUSED);
- timeleft -=atol(temp);
- sprintf(BBName,"%s [%d:%s] Menu (%ld mins. left): ",
- t,Conf+9,ConfName,timeleft/60L);
- pm(BBName,temp,200);
- strupr(temp);
- if(temp[0]=='\0' || temp[0]==' ') { sm("",1); continue; }
- switch(temp[0])
- {
- //case 'Q': sm("",1);ShutDown(); end(); break;
- case 'J': stop=1;break;
- case 'E': Editor(); break;
- case 'R': if(temp[1]=='Z')
- pu(temp,PRV_COMMAND);
- else ReadMsg(temp); break;
- case 'N': if(temp[1]=='E') { GiveNet(); break;}
- pu(temp,PRV_COMMAND); break;
- case 'G': stop=1; break;
- case 'C': Editor(); break;
- case 'M': if(temp[1]=='C' || temp[1]=='E') Edit();
- else pu(temp,PRV_COMMAND); break;
- case 'Z': if(temp[1]=='O'){
- sm("",1); sm("Zoom not allowed in Net conferences",1);}
- else pu(temp,PRV_COMMAND); break;
- default:
- pu(temp,PRV_COMMAND);
- }
- sm("",1);
- if(stop) break;
- }
- if(temp[0]=='\0') { Terminate(); end(); }
- }
-
- Terminate();
- end();
- }
- void GiveNet()
- {
- FILE *fi,*fo;
- char image[200];
- char t[200];
- char filename[200];
- char temp[200];
- char opt[10];
- while(1)
- {
- sm("",1);
- sm("NetWork Master Control",1);
- sm("",1);
- sm(" 1> Show NetLog",1);
- sm(" 2> Show NetAccess",1);
- sm(" 3> PackNet",1);
- sm(" 4> UnPackNet",1);
- if(Security==255)
- {
- sm(" --v--sysop only--v--",1);
- sm(" 5> Add NetAcess",1);
- sm(" 6> Remove NetAccess",1);
- sm(" 7> Delete NetLog",1);
- sm(" 8> Delete NetAccess",1);
- }
- sm(" Q> Exit Net control",1);
- hk(" >:",opt); opt[1]='\0';
- sm(opt,1);
- switch(opt[0])
- {
- case '1': sprintf(image,"%sNet/NetLog",ConfLoc);
- CheckToDisplay(image); break;
- case '5': if(Security!=255) break;pm(" Enter Handle >:",image,30);strupr(image);
- if(LookUp(image))
- {
- pm(" Enter Net BBS Name >:",t,30);
- sprintf(filename,"%-30.30s-%-30.30s",image,t);
- sprintf(image,"%sNet/NetAccess.txt",ConfLoc);
- fi=fopen(image,"a");
- fprintf(fi,"%s\n",filename);
- fclose(fi);
- }
- else sm("Can't locate account",1);
- break;
- case '6': if(Security!=255) break;pm(" Enter Handle >:",image,30);strupr(image);
- if(LookUp(image))
- {
- strupr(image);
- sprintf(filename,"%s/Net/NetAccess.old",ConfLoc);
- if(TLock(filename)) DeleteFile(filename);
- sprintf(t,"%s/Net/NetAccess.txt",ConfLoc);
- if(TLock(t))
- {
- Rename(t,filename);
- fi=fopen(filename,"r");fo=fopen(t,"w");
- while(fgets(t,80,fi)!=NULL)
- {
- sr(t); strcpy(temp,t); temp[29]='\0'; sr(temp);
- strupr(temp);
- if(strcmp(temp,image)) fprintf(fo,"%s\n",t);
- }
- fclose(fi);
- fclose(fo);
- DeleteFile(filename);
- }
- }
- break;
- case '2': sprintf(t,"%sNet/NetAccess",ConfLoc);sm("",1); CheckToDisplay(t);
- break;
- case '3': PackNet(); break;
- case '4': UnPackNet(); break;
- case '7': if(Security!=255) break;
- sprintf(image,"%sNet/NetLog.txt",ConfLoc);
- if(TLock(image)) DeleteFile(image);
- break;
- case '8': if(Security!=255) break;
- sprintf(image,"%sNet/NetAccess.txt",ConfLoc);
- if(TLock(image)) DeleteFile(image); break;
- case 'Q': return; break;
- case 'q': return; break;
- }
- }
- }
- void PackNet()
- {
- register int i;
- long lock;
- char Address[200];
- char Name[200],NetName[200];
- FILE *fi=NULL,*fi1=NULL,*fo1=NULL,*fi2=NULL;
- char NetFileName[200];
- char HeaderName[200];
- char MsgName[200];
- long NextPosition;
- long PriorPosition;
- long TimeVar;
- int MsgCount=0;fi=NULL;
- strcpy(Name,U.Handle);strupr(Name);
- sprintf(Address,"%sNet/NetAccess.txt",ConfLoc);
- if(!TLock(Address))
- {
- sm(" You are not on the NetAccess list",1);
- return;
- }
- sprintf(NetFileName,"%sNode%d/PlayPen/NetMail.DAT",BBSloc,node);
- sprintf(HeaderName,"%sMsgBase/HeaderFile",ConfLoc);
- if(!TLock(HeaderName))
- {
- sm(" Sorry, there is no mail today",1);
- return;
- }
- fi=fopen(Address,"r");
- while(fgets(Address,80,fi)!=NULL)
- {
- sr(Address); strcpy(NetName,&Address[31]);
- Address[30]='\0'; sr(Address);
-
- if(!strcmp(Address,Name))
- {
- lock=LockMsgBase();fclose(fi); fi=NULL;
- fo1=fopen(NetFileName,"w");
- fi1=fopen(HeaderName,"r+b");
- fseek(fi1,(U.LastMsg-1L)*(long)sizeof(struct MyHeader),SEEK_SET);
- PriorPosition=ftell(fi1);
- while(fread((APTR)&Head,sizeof(struct MyHeader),1,fi1)!=NULL)
- {
-
- NextPosition=ftell(fi1);
- if(!Head.Deleted)
- {
- if(!strcmp(NetName,&Head.TNName) || Head.Type=='P')
- {
- if(Head.Type=='R' || !strcmp(NetName,&Head.TNName))
- {
- fseek(fi1,PriorPosition,SEEK_SET);
-
- fwrite((APTR)&Head,sizeof(struct MyHeader),1,fi1);
- fseek(fi1,NextPosition,SEEK_SET);
- }
- sm(".",0);
- fprintf(fo1,"BEGIN:\n");
- fprintf(fo1," FROMNET :%s\n",Head.FNName);
- fprintf(fo1," TONET :%s\n",Head.TNName);
- fprintf(fo1," DATE :%ld\n",time(NULL));
- fprintf(fo1," RECEIVED :%ld\n",Head.Received);
- fprintf(fo1," FROMUSER :%s\n",Head.FName);
- fprintf(fo1," TOUSER :%s\n",Head.TName);
- fprintf(fo1," SUBJECT :%s\n",Head.Subject);
- fprintf(fo1," TYPE :%c\n",Head.Type);
- fprintf(fo1," ----------\n");
- MsgCount +=1;
- Head.Received=time(NULL);
- sprintf(MsgName,"%sMsgBase/%ld",ConfLoc,Head.MsgNum);
- if(TLock(MsgName))
- {
- fi2=fopen(MsgName,"r");
- while(fgets(MsgName,90,fi2)!=NULL)
- {
- fprintf(fo1," %s",MsgName);
- }
- fclose(fi2);
- }
- fprintf(fo1,"END:\n");
- } PriorPosition=ftell(fi1);
- }
- U.LastMsg +=1L;
- }
- UnLock(lock);
- GetHighMsg(LOCK);
- if(U.LastMsg>=Stats.NMsg) U.LastMsg=Stats.NMsg-1L;
- fprintf(fo1,"TOTALMSG THIS PACKET: %5.5d FROM:%s\n",MsgCount,BBSloc);
- fprintf(fo1,"PACKET FROM %s CONF:%s\n",NetAddress,ConfName);
- fclose(fo1);fclose(fi1);
- sprintf(NetFileName,"%sNet/NetLog.TXT",ConfLoc);
- fi1=fopen(NetFileName,"a");
- TimeVar=time(NULL);
- sprintf(MsgName,"%s",ctime(&TimeVar));
- MsgName[strlen(MsgName)-1]='\0';
- fprintf(fi1,"%-20.20s >%5.5d Packed for %s\n",MsgName,MsgCount,NetName);
- fprintf(fi1," >by %s\n",Name);
- fclose(fi1);
-
- }
- if(fi==NULL) break;
- }
- if(fi!=NULL) fclose(fi);
- sm("",1);
- sprintf(MsgName,"TOTAL MESSAGES PACKED :%5.5d",MsgCount);
- sm(MsgName,1); sm("",1);
- if(MsgCount>0)
- {
- sm("Do you wish to download this PACKET ",0);
- if(YesNo(1))
- {
- sprintf(NetFileName,"%sNode%d/PlayPen/NetMail.DAT",BBSloc,node);
- sm("Prepare for Zmodem Download",1);
- Pause();
- sm("",1);
- pu(NetFileName,ZMODEMSEND); DeleteFile(NetFileName);
- }
- }
- }
- void UnPackNet()
- {
- register int i;
- long lock;
- char Address[200];
- char Name[200],NetName[200],NetMail[200];
- FILE *fi=NULL,*fi1=NULL,*fo1=NULL,*fo2=NULL,*fo3=NULL;
- char NetFileName[200];
- char HeaderName[200];
- char MsgName[200];
- char Location[200];
- long NextPosition;
- long PriorPosition;
- long TimeVar;
- int MsgCount=0;fi=NULL;
- strcpy(Name,U.Handle);strupr(Name);
- sprintf(Address,"%sNet/NetAccess.txt",ConfLoc);
- if(!TLock(Address))
- {
- sm(" You are not on the NetAccess list",1);
- return;
- }
- sprintf(NetFileName,"%sNode%d/PlayPen/NetMail.DAT",BBSloc,node);
-
- sprintf(HeaderName,"%sMsgBase/HeaderFile",ConfLoc);
- fi=fopen(Address,"r");
- while(fgets(Address,80,fi)!=NULL)
- {
- sr(Address); strcpy(NetName,&Address[31]);
- Address[30]='\0'; sr(Address);
- strupr(Address);
- if(!strcmp(Address,Name))
- {
- fclose(fi); fi=NULL;
- if(!TLock(NetFileName))
- {
- sm("Do you wish to upload NetMail.Dat ",0);
- if(YesNo(1))
- {
- sprintf(NetName,"%sNode%d/PlayPen/",BBSloc,node);
- sm("Prepare for Zmodem Upload",1);
- Pause();
- sm("",1);
- pu(NetName,ZMODEMRECEIVE); sprintf(NetFileName,"%sNetMail.Dat",NetName);
- if(!TLock(NetFileName))
- {
- sm("Can't locate NetMail.Dat",1);
- return;
- }
- }
- else
- {
- pm("Enter Path to NetMail.Dat >:",Address,80);
- if(Address[0]!='\0')
- {
- if(Address[strlen(Address)-1]!=':' && Address[strlen(Address)-1]!='/')
- Address[strlen(Address)-1]='\0';
- }
- sprintf(NetFileName,"%sNetMail.Dat",Address);
- if(!TLock(NetFileName))
- {
- sm("Can't locate NetMail.Dat",1);
- return;
- }
- }
- }
- strcpy(Location,NetFileName);
- lock=LockMsgBase();
- GetHighMsg(NOLOCK);
- fi1=fopen(NetFileName,"r");
- fo1=fopen(HeaderName,"ab");
- Head.Received=0L;
- fo2=NULL;
- while(fgets(Address,90,fi1)!=NULL)
- {
- sr(Address);
- if(!strnicmp(Address,"BEGIN:",6))
- {
- Head.MsgNum=Stats.NMsg; Stats.NMsg+=1L;
- sprintf(NetName,"%sMsgBase/%ld",ConfLoc,Stats.NMsg-1L);
- fo2=fopen(NetName,"w");continue;
- }
- if(!strnicmp(Address," FROMNET :",11))
- {
- strcpy(Head.FNName,&Address[11]); continue;
- }
- if(!strnicmp(Address," TONET :",11))
- {
- strcpy(Head.TNName,&Address[11]); continue;
- }
- if(!strnicmp(Address," DATE :",11))
- {
- Head.Written=atol(&Address[11]); continue;
- }
- if(!strnicmp(Address," RECEIVED :",11))
- {
- Head.Received=atol(&Address[11]); continue;
- }
- if(!strnicmp(Address," FROMUSER :",11))
- {
- strcpy(Head.FName,&Address[11]); continue;
- }
- if(!strnicmp(Address," TOUSER :",11))
- {
- strcpy(Head.TName,&Address[11]); continue;
- }
- if(!strnicmp(Address," SUBJECT :",11))
- {
- strcpy(Head.Subject,&Address[11]); continue;
- }
- if(!strnicmp(Address," TYPE :",11))
- {
- Head.Type=Address[11]; continue;
- }
- if(!strnicmp(Address," ----------",11)) continue;
- if(!strnicmp(Address,"END",3))
- {
- Head.Deleted=FALSE; Head.Net=TRUE;
- fwrite((APTR)&Head,sizeof(struct MyHeader),1,fo1);
- U.LastMsg +=1L;MsgCount +=1; if(fo2){fclose(fo2);fo2=NULL;}
-
-
- continue;
- };
- if(!strnicmp(Address,"TOTAL",5)) continue;
- if(!strnicmp(Address,"PACKET",5))
- {
-
- sprintf(Name,"%sNet/NetLog.TXT",ConfLoc);
- fo3=fopen(Name,"a");
- TimeVar=time(NULL);
- sprintf(MsgName,"%s",ctime(&TimeVar));
- MsgName[strlen(MsgName)-1]='\0';
- fprintf(fo3,"%-20.20s >%5.5d unpacked from\n",MsgName,MsgCount);
- fprintf(fo3," >%s\n",&Address[12]);
- fprintf(fo3," >by %s\n",U.Handle);
- fclose(fo3);
- sprintf(MsgName,"TOTAL MESSAGES UNPACKED :%5.5d",MsgCount);
- sm(MsgName,1); sm("",1);
- MsgCount=0;
- continue;
- }
- if(fo2)fprintf(fo2,"%s\n",&Address[1]);
- }
- fclose(fi1);
- fclose(fo1);
- if(fo2)fclose(fo2);
- sprintf(NetMail,"%sMsgBase/MailStats",ConfLoc);
- fi1=fopen(NetMail,"wb"); fwrite((APTR)&Stats,sizeof(struct MyStats),1,fi1);
- fclose(fi1);
- if(lock)UnLock(lock);
- DeleteFile(Location);
-
- }
- if(fi==NULL) break;
- }
- if(fi!=NULL) fclose(fi);
- sm("",1);
- //sprintf(MsgName,"TOTAL MESSAGES UNPACKED :%5.5d",MsgCount);
- //sm(MsgName,1); sm("",1);
- }
-
- void Upload_A_File(int opt)
- {
- /*
- char Desc[8][50];
- char CMD[200];
- char temp[200];
- if((dir_info =(struct FileInfoBlock *)AllocMem((long)sizeof(struct FileInfoBlock),0L)) == NULL)
- {
- sm("Memory Allocation Error. Please Leave message with Sysop",1);
- Delay(300L);
- return;
- }
- if(!opt)
- {
- sm("Zmodem Upload selected.",1); Pause();
- sm("",1);
- pu(Upload_To,ZMODEMRECEIVE);
- }
- if (! (pdir=(struct FileLock *)Lock(Upload_To,(ULONG)ACCESS_READ)) )
- {
- free_pdir();
- return;
- }
- if ( ! Examine((BPTR)pdir, dir_info) )
- {
- free_pdir();
- return;
- }
- while(ExNext((BPTR)pdir,dir_info))
- {
- if(dir_info->fib_DirEntryType < 0L )
- {
-
- sprintf(CMD,"%-12s P %7ld ",dir_info->fib_FileName,dir_info->fib_Size);
- SM(CMD,0);
- }
- else
- {
- sprintf(CMD,"%-25s ",dir_info->fib_FileName);
- SM(CMD,0);
- }
- j++;
- if(j==2)
- {
- j=0;
- SM("",1);
- i++;
- }
- SM("",0);
- if(i>17)
- {
- while(1)
- {
- HK("\r\nPress <Q>uit <F>lag, <RETURN> to continue listing >:",CMD);
- strupr(CMD);
- switch(CMD[0])
- {
- case 'Q':
- SM("Quit.",1);
- free_pdir();
- return;
- case 'F': SM("Flag.",1);
- Flag(); break;
- default: SM("Continue.",1); break;
- }
-
- if(ch!='F') break;
- }
- i=0;
- }
- }
- while(1)
- {
- HK("\r\nPress <F>lag, <RETURN> to exit listing >:",CMD);strupr(CMD);
- switch(CMD[0])
- {
- case 'Q':
- SM("Quit.",1);
- free_pdir();
- return;
- case 'F': SM("Flag.",1);
- Flag(); break;
- default: SM("Continue.",1); free_pdir(); return;
- }
-
- if(ch!='F') break;
- }
- */
- }
-
- /*******************************************************/
-
- void free_pdir()
- {
- if ( pdir )
- {
- UnLock((BPTR)pdir);
- pdir=NL;
- }
- return;
- }
- void InitHeader()
- {
- strcpy(Head.FName,"");
- strcpy(Head.TName,"");
- strcpy(Head.Subject,"");
- strcpy(Head.TNName,"");
- strcpy(Head.FNName,"");
- Head.Net=FALSE;
- Head.MsgNum=-1L;
- Head.Received=0L;
- Head.Written=0L;
- Head.Type=' ';
- Head.Deleted=FALSE;
- }
- void InitStats(void)
- {
- Stats.NMsg=1L;
- }
-
- BPTR LockMsgBase(void)
- {
- char GSTR3[200];
- BPTR lock;
- UWORD loop=0;
- LONG error;
- sprintf(GSTR3,"%sMsgBase/MailLock",ConfLoc);
- do
- {
- lock=Lock(GSTR3,ACCESS_WRITE);
- if(!lock)
- {
- error=IoErr();
- if(error==205)
- {
- CreateFile(GSTR3); continue;
- }
- }
- if(!lock)
- {
- Delay(120L);
- sm(".",0);
- }
- } while(!lock&&loop++<30);
- if(loop) sm("",1);
- return(lock);
- }
- BPTR LockUserBase(void)
- {
- char GSTR3[200];
- BPTR lock;
- UWORD loop=0;
- LONG error;
- sprintf(GSTR3,"%sUser.lock",ConfLoc);
- do
- {
- lock=Lock(GSTR3,ACCESS_WRITE);
- if(!lock)
- {
- error=IoErr();
- if(error==205)
- {
- CreateFile(GSTR3);
- }
- }
- if(!lock)
- {
- Delay(120L);
- sm(".",0);
- }
- } while(!lock&&loop++<30);
- if(loop) sm("",1);
- return(lock);
- }
- void GetHighMsg(int opt)
- {
- char t[200];
- long lock;
- FILE *fi;
- if(opt)
- {
- lock=LockMsgBase();
- if(!lock)
- {
- sm(" Error, can't lock msgbase",1);
- Terminate();
- end();
- }
- }
- sprintf(t,"%sMsgBase/MailStats",ConfLoc);
- if(!TLock(t))
- {
- fi=fopen(t,"wb");
- fwrite((APTR)&Stats,sizeof(struct MyStats),1,fi);
- fclose(fi);
- if(opt)UnLock(lock);
- return;
- }
- fi=fopen(t,"rb");
- fread((APTR)&Stats,sizeof(struct MyStats),1,fi);
- fclose(fi);
- if(opt)UnLock(lock);
- }
-
- int GetConf(char *str,int num)
- {
- register int i=0;
- FILE *fi;
- char t[200];
- num -=1;
- if(!TLock(str)) return(0);
- fi=fopen(str,"r");
- while(fgets(t,80,fi)!=NULL)
- {
- sr(t);
- if(i==num)
- {
- fclose(fi);
- if(strlen(t)<30)
- {
- sm("",1);
- sm("",1);
- sm(" Error, CustomConf is invalid",0);
- sm("",1);
- return(0);
- //ShutDown();
- //end();
- }
- else
- {
- strcpy(ConfLoc,&t[29]);
- if(ConfLoc[strlen(ConfLoc)-1]!=':' && ConfLoc[strlen(ConfLoc)-1]!='/')
- strcat(ConfLoc,"/");
-
- Validate(ConfLoc);
- strlim(ConfName,t,25);sr(ConfName);
-
- return(1);
- }
- }
- i +=1;
- }
- fclose(fi);
- // strcpy(t,"J");
- // pu(t,RETURNCOMMAND);
- // ShutDown();
- // end();
- return(0);
- }
- void Validate(char *str)
- {
- char t[200];
- long lock;
- strcpy(t,str);
- if(t[strlen(t)-1]=='/') t[strlen(t)-1]='\0';
- if(!TLock(t)) { lock=CreateDir(t);
- if(lock) UnLock(lock);
- else
- {
- sm("Error can't create Conference",1);
- ShutDown();
- end();
- }
- }
- sprintf(t,"%sUpload",str);
- if(!TLock(t)){ lock=CreateDir(t); if(lock)UnLock(lock); }
- sprintf(t,"%sPartUpload",str);
- if(!TLock(t)){ lock=CreateDir(t); if(lock)UnLock(lock); }
- sprintf(t,"%sMsgBase",str);
- if(!TLock(t)){ lock=CreateDir(t); if(lock)UnLock(lock); }
- sprintf(t,"%sBulletins",str);
- if(!TLock(t)){ lock=CreateDir(t); if(lock)UnLock(lock); }
- sprintf(t,"%sHold",str);
- if(!TLock(t)){ lock=CreateDir(t); if(lock)UnLock(lock); }
- sprintf(t,"%sNet",str);
- if(!TLock(t)){ lock=CreateDir(t); if(lock)UnLock(lock); }
- }
-
-
- void InitUser()
- {
- char temp[100];
- gu(temp,DT_NAME);
- strcpy(U.Handle,temp);
- strcpy(U.Name,"");
-
- U.LastMsg=1L;
- U.AutoMsg=0L;
- U.MsgsPosted=0L;
- U.Mail_Received=0L;
- LoadUser(temp);
- }
- void LoadUser(char *str)
- {
- long deleted=-1L;
- FILE *fi;
- long slot=0L;
- struct User t;
- char image[200];
- long lock;
- lock=LockUserBase();
- sprintf(image,"%sUserBase",ConfLoc);
- if(!lock)
- {
- sm("",1);
- Terminate();
- end();
- }
- if(!TLock(image))
- {
- U.Slot_Number=0L;
- sprintf(image,"%sUserBase",ConfLoc);
- fi=fopen(image,"wb");
- fwrite((APTR)&U,sizeof(struct User),1,fi);
- fclose(fi);
- UnLock(lock);
- return;
- }
- fi=fopen(image,"rb");
- while(fread((APTR)&t,sizeof(struct User),1,fi)!=NULL)
- {
- if(!strcmp(t.Handle,str))
- {
- U=t; fclose(fi); if(lock)UnLock(lock); return;
- }
- if(t.Slot_Number==-1L && deleted==-1L) deleted=slot;
- slot++;
- }
- fclose(fi);
- if(deleted==-1L)
- {
- fi=fopen(image,"ab");
- U.Slot_Number=slot;
- fwrite((APTR)&U,sizeof(struct User),1,fi);
- fclose(fi);
- }
- else
- {
- fi=fopen(image,"r+b");
- U.Slot_Number=deleted;
- fseek(fi,deleted*(long)sizeof(struct User),SEEK_SET);
- fwrite((APTR)&U,sizeof(struct User),1,fi);
- fclose(fi);
- }
- if(lock)UnLock(lock);
- return;
-
- }
- void SaveUser(void)
- {
- long deleted=-1L;
- FILE *fi;
- long slot=0L;
- struct User t;
- char image[200];
- long lock;
- lock=LockUserBase();
- sprintf(image,"%sUserBase",ConfLoc);
- if(!lock)
- {
- sm("",1);
- Terminate();
- end();
- }
- fi=fopen(image,"r+b");
- fseek(fi,U.Slot_Number*(long)sizeof(struct User),SEEK_SET);
- fwrite((APTR)&U,sizeof(struct User),1,fi);
- fclose(fi);
- if(lock)UnLock(lock);
- }
- long LookUp(char *str)
- {
- long deleted=-1L;
- FILE *fi;
- long slot=0L;
- struct User t;
- char image[200];
- long lock;
- lock=LockUserBase();
- sprintf(image,"%sUserBase",ConfLoc);
- if(!lock)
- {
- sm("",1);
- Terminate();
- end();
- }
- fi=fopen(image,"rb");
- while(fread((APTR)&t,sizeof(struct User),1,fi)!=NULL)
- {
- strupr(&t.Handle);
- if(!strcmp(t.Handle,str) && t.Slot_Number!=-1L)
- {
- fclose(fi); UnLock(lock); return(slot+1);
- }
- slot++;
- }
- fclose(fi);
- UnLock(lock);
- return(0);
-
- }
- void end(void)
- {
- if(ActiveConf){ CleanPlayPen();
- SaveUser();}
- exit(0);
- }
-
- void CleanPlayPen()
- {
- char FileName[200];
- sprintf(FileName,"DELETE %sNode%d/PlayPen/#? QUIET",BBSloc,node);
- Execute(FileName,NULL,NULL);
- }
-
-
-
- /****************************** EDITOR **********************************/
-
- void ReadMsg(char str1[])
- {
- long lock;
- FILE *fi=NULL;
- long TimeVar;
- long oldmsg;
- BOOL mine=FALSE;
- char Name[40];
- char image[200];
- char date[100];
- char temp[255];
- char str[200];
- register int i;
- GetHighMsg(LOCK);
- U.LastMsg= atoi(&str1[1])==0 ? U.LastMsg:atoi(&str1[1]);
- strcpy(Name,U.Handle);
- strupr(Name);
- sprintf(image,"%sMsgBase/HeaderFile",ConfLoc);
- //if(U.LastMsg==Stats.NMsg-1L) return;
-
- while(U.LastMsg<Stats.NMsg)
- {
- if(U.LastMsg==0) U.LastMsg=1;
- mine=FALSE;
- lock=LockMsgBase();
- if(!lock)
- {
- sm(" Can't get lock on MsgBase",1); return;
- }
- fi=fopen(image,"r+b");
- fseek(fi,(U.LastMsg-1L)*sizeof(struct MyHeader),SEEK_SET);
- fread((APTR)&Head,sizeof(struct MyHeader),1,fi);
- strupr(Head.TName); strupr(Head.FName);
- if(!Head.Deleted)
- {
- if(!strcmp(Head.TName,Name) && Head.Received==NULL)
- {
- Head.Received=time(NULL);
- fseek(fi,(U.LastMsg-1L)*sizeof(struct MyHeader),SEEK_SET);
- fwrite((APTR)&Head,sizeof(struct MyHeader),1,fi);
-
- }
-
- }
- fclose(fi); fi=NULL;
- if(!Head.Deleted)BufferMsg(U.LastMsg);
- else
- {
- sprintf(str,"(%ld)",U.LastMsg);
- // U.LastMsg +=1L;
- sm("",1);
- sm("Message ",0);sm(str,0);sm(" is deleted.",1);
- // sm("",1); if(U.LastMsg>=Stats.NMsg) U.LastMsg=Stats.NMsg-1L;return;
- }
- if(lock)UnLock(lock);
-
- if(!strcmp(Head.TName,Name) || !strcmp(Head.FName,Name))
- {
- mine=TRUE;
- }
- if(!mine && Head.Type=='R' && Security!=255)
- {
- sm(" Receiver Only ",1);
- }
-
- NoPass:
-
- while(1)
- {
- if(!((!mine && Head.Type=='R' && Security!=255) || Head.Deleted))
- {
- TimeVar=Head.Written;
- sprintf(date,"%s",ctime(&TimeVar));
- date[strlen(date)-1]='\0';
- sprintf(str,"Date : %-30s Number: %ld",date,Head.MsgNum);
- sm("",1);
- sm(str,1);
- if(Head.Net)
- {
- sprintf(str,"ToNet : %-30s FrmNet: %-30.30s",Head.TNName,Head.FNName);
- sm(str,1);
- }
- sprintf(str,"To : %-30s Recv'd: ",Head.TName);
- sm(str,0);
- if(!strcmp(Head.TName,"ALL"))
- {
- sm("N/A.",1);
- }
- else
- {
- if(Head.Received==NULL)
- {
- sm("No.",1);
- }
- else
- {
- TimeVar=Head.Received;
- sprintf(date,"%s",ctime(&TimeVar));
- date[strlen(date)-1]='\0';
- sm(date,1);
- }
- }
- sprintf(str,"From : %-30s Status: ",Head.FName);
- sm(str,0);
- if(Head.Type=='P')
- {
- sm("Public Message.",1);
- }
- else sm("Receiver only.",1);
-
- sprintf(str,"Subject: %-30s",Head.Subject);
- sm(str,1); sm("",1);
- i=0;
- while(i<Lines)
- {
- sm(MsgBuf[i],1);
- i++;
- }
- }
- sm("",1);
- if(U.LastMsg==Stats.NMsg-1L)
- strcpy(str,"QUIT");else
- sprintf(str,"%ld+%ld",U.LastMsg+1L,Stats.NMsg-1L);
- if(mine || Security==255)
- {
-
- strcpy(temp,"A>gain D>elete R>eply");
- sm(temp,0);
- sprintf(temp," Q>uit <CR>=Next ( %s )?",str);
- }
- else
- {
- strcpy(temp,"A>gain R>eply");
- sm(temp,0);
- sprintf(temp," Q>uit <CR>=Next ( %s )? ",str);
- }
- sm(temp,0);
- pm("",temp,10); strupr(temp);
- sm("",1);
- if(temp[0]=='R')
- {
- oldmsg=Head.MsgNum;
- if(Head.Net)strcpy(Head.TNName,Head.FNName);
- if(Head.Net)strcpy(Head.FNName,ConfName);
- strcpy(Head.TName,Head.FName);
- strcpy(Head.FName,U.Handle);
- Head.Received=0L;
- MsgHeaders(0);
- ReplyMyMsg();
- if(Edit()==0) SaveMsg();
- if(mine)
- {
- sm("Delete orignial message ",0);
- if(YesNo(2)) temp[0]='D';
- }
- if(temp[0]!='D')break; Head.MsgNum=oldmsg;
- }
-
- if((mine || Security==255) && temp[0]=='D')
- {
- Head.Deleted=TRUE;
- lock=LockMsgBase();
- if(!lock)
- {
- sm(" Error, can't lock msgbase",1);
- }
- else
- {
- sprintf(str,"%sMsgBase/%ld",ConfLoc,Head.MsgNum);
- DeleteFile(str);
- sprintf(str,"%sMsgBase/HeaderFile",ConfLoc);
- fi=fopen(str,"r+b");
- fseek(fi,(Head.MsgNum-1L)*(long)sizeof(struct MyHeader),SEEK_SET);
- fwrite((APTR)&Head,sizeof(struct MyHeader),1,fi);
- fclose(fi);
- if(lock)UnLock(lock);
- sm(" Message Deleted.",1);
- break;
- }
- }
- if(temp[0]=='Q' || temp[0]=='\0') break;
- }
- if(temp[0]=='Q') break;
- U.LastMsg +=1L;
- GetHighMsg(LOCK);
- }
- if(U.LastMsg>=Stats.NMsg) U.LastMsg=Stats.NMsg-1L;
- }
- void ReplyMyMsg()
- {
- int i,i1,i2,i3;
- char str[200];
- sm(" Quote in Reply ",0);
- stats=YesNo(2);
- if(stats<0) return;
- sm("",1);
- //Lines=0;
- //while(MsgBuf[Lines][0]!='\0') Lines++;
- for(i=0; i<Lines; i++)
- {
- sprintf(str,"%2d> %s",i+1,MsgBuf[i]);
- sm(str,1);
- }
- for(;;)
- {
- sm("",1);
- sm(" Enter Startline,Endline or (*=ALL, A=Abort): ",0);
- pm("",str,6);
- stats=str[0];
- if(stats=='A'||stats=='a')
- {
- i=(-1);
- Lines=0;
- break;
- }
- if(stats=='*')
- {
- i=1;
- i2=Lines;
- }
- else
- {
- sscanf(str,"%d,%d",&i,&i2);
- }
- if((i>0&&i<=Lines)&&(i2>0&&i2<=Lines)&&(i<=i2))
- {
- break;
- }
- }
- if(i!=(-1))
- {
- for(i3=0; i3<=(i2-i); i3++)
- {
- if(i3<98)
- {
- MsgBuf[i+i3-1][78]='\0';
- sprintf(str,">%s",MsgBuf[i+i3-1]);
- strcpy(MsgBuf[i3],str);
- }
- }
- if(i3<98)
- {
- Lines=i3;
- }
- else
- {
- Lines=98;
- }
- strcpy(MsgBuf[Lines++]," ");
- MsgBuf[Lines][0]='\0';
- }
- else
- {
- for(i=0; i<100; i++)
- {
- MsgBuf[i][0]='\0';
- }
- }
- }
- void BufferMsg(long msg)
- {
- FILE *fi;
- char image[100];
-
- register int i=0;
- InitBuffer();
- Lines=0;
- sprintf(image,"%sMsgBase/%ld",ConfLoc,msg);
- if(!TLock(image))
- {
- strcpy(MsgBuf[0],"Can't locate message");
- return;
- }
- fi=fopen(image,"r");
- while(fgets(image,80,fi)!=NULL)
- {
- sr(image);
- strcpy(MsgBuf[i],image);
- i++; Lines++;
- if(i==99) break;
- }
- fclose(fi);
- }
-
- void Editor()
- {
- Lines=0;
- if(MsgHeaders(1)) if(Edit()==0) SaveMsg();
- }
-
- void SaveMsg()
- {
- long lock;
- char image[200];
- int i=0;
- FILE *fi;
-
- GetHighMsg(LOCK);
- lock=LockMsgBase();
- if(!lock)
- {
- sm("",1);
- sm(" Error can't access msgbase. Message not saved",1);
- return;
- }
- Head.MsgNum=Stats.NMsg;
- if(Head.TNName[0]!=NULL)
- {
- Head.Net=TRUE;
- }
- Head.Deleted=FALSE;
- Head.Written=time(NULL);
- Head.Received=0L;
- sprintf(image,"%sMsgBase/HeaderFile",ConfLoc);
- fi=fopen(image,"ab");
- fwrite((APTR)&Head,sizeof(struct MyHeader),1,fi);
- fclose(fi);
- Stats.NMsg+=1;
- sprintf(image,"%sMsgBase/MailStats",ConfLoc);
- fi=fopen(image,"wb");
- fwrite((APTR)&Stats,sizeof(struct MyStats),1,fi);
- fclose(fi);
- if(lock)UnLock(lock);
- sprintf(image,"%sMsgBase/%ld",ConfLoc,Head.MsgNum);
- fi=fopen(image,"w");
- while(i<Lines)
- {
- fprintf(fi,"%s\n",MsgBuf[i]);
- i++;
- }
- fclose(fi);
- sprintf(image,"%ld",Head.MsgNum);
- sm("",1);
- sm(" Saving message number (",0);
- sm(image,0);sm(").",1);
- sm("",1);
- }
- int MsgHeaders(int opt)
- {
- MsgNetHeader(opt);
- if(!MsgToHeader(opt)) return(0);
- if(!MsgSubjectHeader(opt)) return(0);
- MsgReceiveHeader();
- return(1);
- }
- void MsgReceiveHeader()
- {
- if(!strcmp(Head.TName,"ALL")) { Head.Type='P';return;}
- sm(" Receiver only ",0); if(!YesNo(2)) Head.Type='P';
- else Head.Type='R';
- }
-
- void MsgNetHeader(int opt)
- {
- char temp[200];
- sm("",1);
- sm(" (------------------------------)",1);
- sm(" Net: (Enter)='N/A'? ",0);
- if(opt)
- {
- pm("",temp,29); strcpy(&Head.TNName,temp);
- strcpy(&Head.FNName,NetAddress);
- }
- else sm(Head.TNName,1);
- }
- int MsgToHeader(int opt)
- {
- char temp[200];
- sm(" To: (Enter)='ALL'? ",0);
- if(opt)
- {
- pm("",temp,29);
- strcpy(&Head.FName,U.Handle);
- if(temp[0]=='\0') { strcpy(&Head.TName,"ALL"); return(1);}else strcpy(&Head.TName,temp);
- strupr(&Head.TName);
- if(!strcmp(&Head.TName,"ALL")) return(1);
- if(Head.TNName[0]==NULL)
- if(!LookUp(&Head.TName))
- {
- sm("",1);
- sm(" User does not have access to this conference",1);
- sm("",1);
- return(0);
- }
- }
- else sm(Head.TName,1);
- return(1);
- }
- int MsgSubjectHeader(int opt)
- {
- char temp[200];
- sm("Subject: (Blank)=abort? ",0);
- if(opt)pm("",temp,29);
- else li(Head.Subject,temp,29);
- //sm("",1);
- if(opt)
- if(temp[0]=='\0') return(0);
- strcpy(Head.Subject,temp);
- return(1);
- }
- void InitBuffer()
- {
- register int i=0;
- while(i<99)
- {
- strcpy(MsgBuf[100],"");
- i++;
- }
- }
-
- int Edit(void)
- {
- register int c;
- int cn,j,x,back,BKFlag;
- static char str[200],SPACE[90],str2[10],temp[170];
- char t[10];
- /* Clear msg buffer */
- InitBuffer();
- str[0]='\0';
- x=0;
- BKFlag=0;
-
- sm("",1);
- sm(" Enter your text. (Enter) alone to end. (75 chars/line, 100 lines, max)",1);
- sm(" (*-------*-------*-------*-------*-------*-------*-------*-------*-------*--)",1);
-
- if(Lines!=0)
- {
- for(j=0; j<Lines; j++)
- {
- sprintf(SPACE,"%2d> %s",j+1,MsgBuf[j]);
- sm(SPACE,1);
- }
- }
-
- SPACE[0]='\0';
-
- do
- {
- BEG_IN:
- strcpy(MsgBuf[Lines],SPACE);
- sprintf(str,"%2d> %s",Lines+1,MsgBuf[Lines]);
- sm(str,0);
- for(;;)
- {
- Next2:
- // c=Check_Online_Status();
- // if(c<0) { return(c); }
- hk("",t);c=t[0];
- // c=ReadChar(KEYBOARD_TIMEOUT);
- if(c<0) { return(c); }
- if(c=='\r')
- {
- if(SPACE[0]=='\0')
- {
- MsgBuf[Lines][0]='\0';
- BKFlag=1;
- break;
- }
- strcpy(MsgBuf[Lines],SPACE);
- SPACE[0]='\0';
- sm("",1);
- x=0;
- break;
- }
- if(c=='\30')
- {
- while(x)
- {
- sm("\b \b",0);
- --x;
- }
- SPACE[x]='\0';
- goto Next2;
- }
- if(c=='\b' || c=='\177')
- {
- if(x>0)
- {
- x-=1;
- SPACE[x]='\0';
- sm("\b \b",0);
- goto Next2;
- }
- goto Next2;
- }
- if(c=='\t')
- {
- c=x%8;
- if(x+(8-c)>72)
- {
- c='\t';
- }
- else
- {
- for(;c<8; c++)
- {
- str2[0]=(char)' ';
- str2[1]='\0';
- sm(" ",0);//sendchar(' ');
- strcat(SPACE,str2);
- x++;
- }
- }
- }
- if(c<' ')
- {
- goto Next2;
- }
- x+=1;
- sm(t,0);//sendchar(c);
- str2[0]=(char)c;
- str2[1]='\0';
- strcat(SPACE,str2);
- if(x>75)
- {
- back=0;
- for(cn=x; cn>=0; cn--)
- {
- if(SPACE[cn-1]==' ')
- {
- back=x-cn;
- SPACE[cn-1]='\0';
- break;
- }
- }
- if(back==0)
- {
- strcpy(MsgBuf[Lines],SPACE);
- sm("",1);
- SPACE[0]='\0';
- x=0;
- break;
- }
- str[0]='\0';
- for(cn=(x-back); cn<x; cn++)
- {
- str2[0]=SPACE[cn];
- str2[1]='\0';
- strcat(str,str2);
- }
- x=strlen(str);
- strcpy(MsgBuf[Lines],SPACE);
- strcpy(SPACE,str);
- for(cn=0; cn<x; cn++)
- {
- sm("\b \b",0);
- }
- sm("",1);
- break;
- }
- }
- Lines+=1;
- if(Lines==98&&BKFlag==0)
- {
- sm("",1);
- sm("Warning two lines remaining.",1);sm("",1);
- }
- } while(BKFlag==0&&Lines<100);
- if(Lines<100)
- {
- Lines-=1;
- }
- else
- {
- Lines=100;
- }
- sm("",1);
-
- do
- {
- sm("",1);
- sm("A)bort, C)ont, D)elete,",0);sm(" E)dit, F)ile, L)ist, S)ave Option? ",0);
- pm("",str,10);
- if(str[0]=='D'||str[0]=='d')
- {
- do
- {
- if(Lines==0)
- {
- sm("",1);
- sm("No lines to delete.",1);
- stats=0;
- break;
- }
- sprintf(str,"Line number to delete [1..%d]? ",Lines);
- sm("",1);
- sm(str,0);
- pm("",str,5);stats=atoi(str);
- if(stats<0) { break; }
- if(str[0]=='\0') { stats=0; break; }
- sscanf(str,"%d",&stats);
- if(stats<1||stats>Lines)
- {
- sm("",1);
- sprintf(str,"Line %d does not exist.",stats);
- sm(str,1);
- }
- } while(stats<1||stats>Lines);
- if(stats<0) { break; }
- if(stats==0) { continue; }
- sm("",1);
- sprintf(str,"%2d> %s",stats,MsgBuf[stats-1]);
- sm(str,1);sm("",1);
- sm("Is this the correct line (Y/N)? ",0);
- cn=YesNo(0);
- if(cn<0) { break; }
- if(cn)
- {
- for(j=(stats-1); j<Lines; j++)
- {
- strcpy(MsgBuf[j],MsgBuf[j+1]);
- }
- sm("",1);
- sprintf(str,"Deleted line %d.",stats);
- Lines-=1;
- sm(str,1);
- }
- continue;
- }
- if(str[0]=='C'||str[0]=='c')
- {
- sm("",1);
- Lines-=1;
- if(Lines<0)
- {
- Lines=0;
- }
- strcpy(SPACE,MsgBuf[Lines]);
- BKFlag=0;
- x=strlen(SPACE);
- goto BEG_IN;
- }
- if(str[0]=='E'||str[0]=='e')
- {
- if(Lines<1)
- {
- sm("",1);
- sm("No Lines to edit!",1);
- continue;
- }
- LoopHere:
- sm("",1);
- sprintf(str,"Line number to edit [1..%d]? ",Lines);
- sm(str,0);
- pm("",str,5); stats=atoi(str);
- if(stats<0)
- {
- return(1);
- }
- if(str[0]=='\0')
- {
- continue;
- }
- sscanf(str,"%d",&x);
- if(x<1||x>Lines)
- {
- sm("",1);
- sprintf(str,"Line %d does not exist.",x);
- sm(str,1);
- goto LoopHere;
- }
- sm("",1);
- sprintf(SPACE,"%2d> %s",x,MsgBuf[x-1]);
- sm(SPACE,1);
- sm("",1);
- sm(" Old string;New string",0);sm("",1);
- sm(" (------------------------------------------------------------)",0);
- sm("",1); sm(" :",0);
- pm("",str,60);
- if(str[0]=='\0')
- {
- continue;
- }
- stats=ProcessLine(str,MsgBuf[x-1],temp);
- if(stats==0)
- {
- sm("",1);
- sm("String not found!",1);
- continue;
- }
- else
- {
- sm("",1);
- sm(" NewLine:",1);sm(" --------",1);sm(" >",0);
- sm(temp,0);
- sm("",1);sm("",1);sm("Correct ",0);
- stats=YesNo(1);
- if(stats<0) { return(stats); }
- if(!stats)
- {
- continue;
- }
- strcpy(MsgBuf[x-1],temp);
- }
- continue;
- }
- if(str[0]=='L'||str[0]=='l')
- {
- sm("",1);
- for(j=0; j<Lines; j++)
- {
- sprintf(SPACE,"%2d> %s",j+1,MsgBuf[j]);
- sm(SPACE,1);
- }
- continue;
- }
- /*
- if(str[0]=='F'||str[0]=='f')
- {
- if(User.Sec_Status>250)
- {
- for(;;)
- {
- AEPutStr("\r\nEnter path/filename to attach ('5 <DIR>'=DIR): ");
- stats=LineInput("",AttachedFile,250,KEYBOARD_TIMEOUT);
- if(stats<0)
- {
- return(stats);
- }
- if(AttachedFile[0]=='5'&&AttachedFile[1]==' ')
- {
- strcpy(MAINMENU_Li,AttachedFile);
- AttachedFile[0]='\0';
- MyDirAnyWhere();
- continue;
- }
- if(AttachedFile[0]!='\0')
- {
- BPTR fh;
-
- strlwr(AttachedFile);
-
- if(fh=Open(AttachedFile,MODE_OLDFILE))
- {
- Close(fh);
- AEPutStr("Delete file when message is deleted ");
- stats=YesNo(2);
- if(stats<0)
- {
- return(stats);
- }
- if(stats)
- {
- AttachedFile[0]=toupper(AttachedFile[0]);
- }
- }
- else
- {
- sprintf(GSTR3,"%s not found, try another.\r\n",AttachedFile);
- AEPutStr(GSTR3);
- AttachedFile[0]='\0';
- continue;
- }
- }
- break;
- }
- }
- else
- {
- AEPutStr("\r\nCommand requires higher access.\r\n");
- }
- }
- */
- if(str[0]=='S'||str[0]=='s')
- {
- //User.Messages_Posted++;
- return(0);
- }
-
- if(str[0]=='A'||str[0]=='a')
- {
- sm("",1);sm("Abort message entry (y/n)? ",0);
- stats=YesNo(0);
- if(stats<0)
- {
- break;
- }
- if(stats)
- {
- return(-1);
- }
- }
- } while(stats>=0);
- return(stats);
- }
-
-
- int ProcessLine(char *pat, char *vorig, char *dest)
- {
- int i,i2,nff;
- char rep[80],orig[100];
-
- strcpy(orig,vorig);
- for(i=0; i<=strlen(pat); i++)
- {
- if(pat[i]==';')
- {
- break;
- }
- }
- if(i>=strlen(pat))
- {
- return(0);
- }
- pat[i]='\0';
- strcpy(rep,(char *)&pat[i+1]);
-
- dest[0]='\0';
-
- for(i=0; i<=(strlen(orig)-strlen(pat)); i++)
- {
- nff=1;
- if(pat[0]==orig[i])
- {
- nff=0;
- for(i2=i+1; (i2-i)<strlen(pat); i2++)
- {
- if(pat[i2-i]!=orig[i2])
- {
- nff=1;
- break;
- }
- }
- }
- if(nff!=1)
- {
- orig[i]='\0';
- strcpy(dest,orig);
- strcat(dest,rep);
- if(i2<strlen(vorig))
- {
- strcat(dest,(char *)&orig[i2]);
- }
- dest[75]='\0';
- return(1);
- }
- }
- return(0);
- }
-
- int YesNo(UWORD flag)
- {
- int ch;
- char temp[10];
- if(flag)
- {
- ch=flag-1;
- sm((ch?"(y/N)? ":"(Y/n)? "),0);
- }
-
- for(;;)
- {
- hotkey("",temp);ch=temp[0];
- if(ch<0) return(ch);
- if(ch=='\r'||ch=='\n')
- {
- if(flag==1)
- {
- ch='y';
- }
- if(flag==2)
- {
- ch='n';
- }
- }
- if(ch=='y'||ch=='Y')
- {
- sm("Yes",1);
- return(1);
- }
- if(ch=='n'||ch=='N')
- {
- sm("No",1);
- return(0);
- }
- }
- }
- void sr(char *str)
- {
- register int i;
- i=strlen(str)-1;
- while(i>-1)
- {
- if(*(str+i)<=32) *(str+i)='\0'; else break;
- i--;
- }
- }
-
- void strlim(char *str1,char *str2,int limit)
- {
- register int i=0;
- if(strlen(str2)>limit)
- {
- printf("Error in line %d , setting is limited to %d characters\n",ALine,limit);
- printf(">%s\n\n",str2);
- ACPError=TRUE;
- }
- while(i<limit)
- {
- if(*(str2)=='\0') break;
- *(str1+i)=*(str2+i);
- i++;
- }
- }
- void CreateFile(char *str)
- {
- FILE *fi;
- fi=fopen(str,"wb");
- fclose(fi);
- }
- int strnicmp(char *str1,char *str2,int len)
- {
- register int i;
- strupr(str1);
- strupr(str2);
- i=0;
- while(i<len)
- {
- if(*(str1+i)!=*(str2+i)) return(1);
- i++;
- }
- return(0);
- }
- void Pause()
- {
- char t[10];
- sm("(Pause)...Space to Resume:",0);
- do
- {
- hk("",t);
- }
- while(t[0]!=32 && t[0]!=13 && t[0]!=12);
- sm("",1);
- }
- void Terminate(void)
- {
- pu(OldConfName,BB_CONFNAME);
- pu(OldConfLoc,BB_CONFLOCAL);
- ShutDown();
- }
- void LastCommand(void)
- {
- sm("",1);sm("",1);
- pu(OldConfName,BB_CONFNAME);
- pu(OldConfLoc,BB_CONFLOCAL);
-
- }
-
- int Allowed(void)
- {
- FILE *fi;
- char image[200];
- char FileName[200];
- gu(image,DT_NAME);
- sprintf(FileName,"%sUsersAllowed",ConfLoc);
- fi=fopen(FileName,"r");
- if(fi==NULL) return(0);
- strupr(image); sr(image);
- while(fgets(FileName,80,fi)!=NULL)
- {
- sr(FileName);
- strupr(FileName);
- if(!strcmp(image,FileName))
- {
- fclose(fi); return(1);
- }
- }
- fclose(fi);
- return(0);
- }